Online transaction processing (OLTP) is used to facilitate the storage, retrieval, and maintenance of transactional data (e.g., transaction-related data). OLTP is used in industries (such as banks, airlines, and retailers) that rely heavily on the efficient processing of a large number of client transactions. Database systems that support OLTP are usually distributed across multiple servers to avoid single points of failure and to spread the volume of data and traffic.
The demands associated with high-throughput OLTP databases and systems are growing dramatically with the explosion in the amount of data and the introduction of new types of transactions. Traditional, smaller transactions are giving way to larger and more complex transactions due to the increased complexity of business models.
Some contemporary OLTP systems attempt to improve performance by exploiting inter-transaction parallelism. These types of systems schedule multiple worker threads to execute concurrently, with each thread running a complete transaction on its own. However, there can be problems with these types of systems, such as poor instruction-data locality; that is, a thread executing on one server may need to act on data that resides on other servers. To reach that data, the thread sends database queries in the form of, for example, a Structured Query Language (SQL) statement to the servers, which generate executable code for each query and then execute the query. The tasks of compiling the query, generating an execution plan, and executing the query increase overhead. Another problem with these types of systems is that different threads, performing different transactions, may attempt to access the same data at the same time. As a result, large numbers of lock and latch conflicts can occur, resulting in poor performance and poor scalability.
Other contemporary OLTP systems attempt to improve performance by exploiting intra-transaction parallelism. These types of systems run each query in a transaction on parallel execution engines using, for example, SQL statements. Problems with these types of systems also include poor instruction-data locality and increased overhead as described above, as well as difficulties with profiling system performance.